home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Format CD 43
/
Amiga Format CD43 (1999)(Future Publishing)(GB)(Track 1 of 2)[!][issue 1999-09].iso
/
-serious-
/
sound
/
ry30ed
/
src
/
ryed.c
< prev
next >
Wrap
C/C++ Source or Header
|
1999-06-14
|
86KB
|
1,983 lines
// RY30 voice editor, (c) 1998 G. Jones
#include "classmate.h"
#include "waves.h"
#include <devices/serial.h>
#include <stdlib.h>
#include <exec/types.h>
#include <proto/asl.h>
#include <time.h>
int main(int argc, char **argv);
void close_all(void);
int openserial(char *devicename);
void closeserial(void);
BOOL sendsysex(char *packet);
void write(int param);
void setindCH(int display, char *string);
void assign(char *dest, int src, int pos);
void dump(struct RYVoice *voice, BOOL save);
void setsliders(struct RYVoice *voice);
void initvoice(struct RYVoice *voice[], int n);
void randomsound(struct RYVoice *voice[], int voic, BOOL filter, BOOL pitch, BOOL decay_pan, BOOL wave, int osc);
int rnd_num(int max);
BOOL reqFile(struct RYVoice *voice);
unsigned short int updcrc(unsigned short int,int,unsigned short int);
struct timeval Time;
struct MsgPort *SerialMP; /* Message port pointer */
struct IOExtSer *SerialIO; /* I/O request pointer */
unsigned short int crc16;
struct Node *node;
char *nodename;
BOOL osc1=TRUE;
BOOL osc2=TRUE;
int do_osc = 3;
UBYTE checksum;
int voic=0;
struct TagItem frtags[] =
{
ASLFR_TitleText, (ULONG)"Save Sys Ex",
ASLFR_InitialLeftEdge, 400,
ASLFR_InitialTopEdge, 300,
ASLFR_InitialWidth, 250,
ASLFR_InitialHeight, 400,
ASLFR_DoSaveMode, TRUE,
ASLFR_PositiveText, (ULONG)"Save",
ASLFR_NegativeText, (ULONG)"Cancel",
ASLFR_InitialFile, (ULONG)"voice.syx",
ASLFR_InitialDrawer, (ULONG)"ram:",
TAG_DONE
};
char d_header[]=
{
0xF0, 0x43, 0x00, 0x7A, 0x00, 0x76
};
char id[]=
{
'L','M',' ',' ','0','0','1','7',' ',' ',
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00
};
struct RYVoice //=
{
int src;
int dest;
int level;
int peglevel;
int pegrate;
int output;
int indlevel;
char name[9];
int wave1;
int wave1level;
int pan1;
int pitch1;
int decay1;
int filter1;
int cutoff1;
int res1;
int eg1level;
int eg1rate;
int sen_level1;
int sen_pitch1;
int sen_eg1;
int wave2;
int wave2level;
int pan2;
int pitch2;
int decay2;
int filter2;
int cutoff2;
int res2;
int eg2level;
int eg2rate;
int sen_level2;
int sen_pitch2;
int sen_eg2;
int group;
BOOL poly;
};
FILE *voicefile;
struct List C_Filter1_list, R_Filter1_list, CT_Filter1_list, LB_Filter1_list
, C_Alternate_list, R_Alternate_list, CT_Alternate_list, LB_Alternate_list
, C_Output_list, R_Output_list, CT_Output_list, LB_Output_list, Wavelist,
Wavelist2
;
UBYTE *Filter1_str[] = { "THRU", "Low Pass 12", "Low Pass 24", "High Pass 12", "High Pass 24",
NULL };
UBYTE *Alternate_str[] = { "OFF", "1", "2", "3", "4",
"5", "6", "7", NULL };
UBYTE *Output_str[] = { "Stereo", "Stereo + Indv 1", "Stereo + Indv 2", "Indv 1", "Indv 2",
"Indv 1 & 2", NULL };
struct Screen *gScreen = NULL;
struct DrawInfo *gDrinfo = NULL;
struct MsgPort *gApp_port = NULL;
struct Window *gMain_window = NULL;
struct Gadget *gMain_Gadgets[ 65 ];
Object *gWindow_object = NULL;
APTR gVi;
void setind(int display, int level);
int main(int argc, char **argv)
{
struct RYVoice *voice[96];
int i;
for(i=0; i <96;i++)
{
voice[i]=NULL;
}
initvoice(voice,0);
openserial("serial.device");
gScreen = LockPubScreen( NULL );
if ( gScreen )
{
if (ButtonBase);
gDrinfo = GetScreenDrawInfo ( gScreen );
gVi = GetVisualInfo( gScreen, TAG_DONE );
gApp_port = CreateMsgPort();
NewList(&Wavelist);
NewList(&Wavelist2);
NewList(&C_Filter1_list);
NewList(&R_Filter1_list);
NewList(&CT_Filter1_list);
NewList(&LB_Filter1_list);
MakeChooserList(&C_Filter1_list, Filter1_str);
MakeRadioList(&R_Filter1_list, Filter1_str);
MakeClickTabList(&CT_Filter1_list, Filter1_str);
MakeListBrowserList1(&LB_Filter1_list, Filter1_str);
MakeListBrowserList1(&Wavelist, Wave_str);
MakeListBrowserList1(&Wavelist2, Wave_str);
NewList(&C_Alternate_list);
NewList(&R_Alternate_list);
NewList(&CT_Alternate_list);
NewList(&LB_Alternate_list);
MakeChooserList(&C_Alternate_list, Alternate_str);
MakeRadioList(&R_Alternate_list, Alternate_str);
MakeClickTabList(&CT_Alternate_list, Alternate_str);
MakeListBrowserList1(&LB_Alternate_list, Alternate_str);
NewList(&C_Output_list);
NewList(&R_Output_list);
NewList(&CT_Output_list);
NewList(&LB_Output_list);
MakeChooserList(&C_Output_list, Output_str);
MakeRadioList(&R_Output_list, Output_str);
MakeClickTabList(&CT_Output_list, Output_str);
MakeListBrowserList1(&LB_Output_list, Output_str);
gWindow_object = WindowObject,
WA_ScreenTitle, "RY30 Editor",
WA_Title, "RY30 Editor v0.5 © G. O. Jones",
WA_Left, 0,
WA_Top, 0,
WA_Height, 300,
WA_Width, 600,
WA_MinWidth, 150,
WA_MaxWidth, 8192,
WA_MinHeight, 80,
WA_MaxHeight, 8192,
WA_InnerWidth, 0,
WA_InnerHeight, 0,
WA_CustomScreen, gScreen,
WINDOW_AppPort, gApp_port,
WA_CloseGadget, TRUE,
WA_DepthGadget, TRUE,
WA_SizeGadget, TRUE,
WA_SizeBRight, FALSE,
WA_SizeBBottom, TRUE,
WA_DragBar, TRUE,
WA_NoCareRefresh, TRUE,
WA_IDCMP,
IDCMP_GADGETDOWN | IDCMP_GADGETUP | IDCMP_CLOSEWINDOW |
0,
WINDOW_ParentGroup, VLayoutObject,
LAYOUT_DeferLayout, TRUE,
LAYOUT_AddChild, LayoutObject,
LAYOUT_DeferLayout, FALSE,
LAYOUT_SpaceOuter, FALSE,
LAYOUT_BottomSpacing, 2,
LAYOUT_TopSpacing, 2,
LAYOUT_LeftSpacing, 2,
LAYOUT_RightSpacing, 2,
LAYOUT_Orientation, LAYOUT_ORIENT_VERT,
LAYOUT_HorizAlignment, LALIGN_LEFT,
LAYOUT_VertAlignment, LALIGN_TOP,
LAYOUT_BevelState, IDS_SELECTED,
LAYOUT_FixedHoriz, TRUE,
LAYOUT_FixedVert, TRUE,
LAYOUT_SpaceInner, TRUE,
LAYOUT_AddChild, HGroupObject,
LAYOUT_AddChild, gMain_Gadgets[ 54 ] = ScrollerObject,
GA_ID, 54,
GA_RelVerify, TRUE,
GA_TabCycle, TRUE,
SCROLLER_Top, voice[0]->dest,
SCROLLER_Visible, 1,
SCROLLER_Total, 96,
SCROLLER_ArrowDelta, 1,
SCROLLER_Orientation, SORIENT_HORIZ,
ScrollerEnd,
CHILD_Label, LabelObject,
LABEL_Text, "Voice",
LabelEnd,
LAYOUT_AddChild, gMain_Gadgets[ 55 ] =ButtonObject,
GA_ID,55,
GA_ReadOnly, TRUE,
GA_Text,"0",
ButtonEnd,
CHILD_WeightedHeight,0,
LayoutEnd,
CHILD_WeightedHeight,0,
LAYOUT_AddChild, HGroupObject,
LAYOUT_AddChild, gMain_Gadgets[ 5 ] = StringObject,
GA_ID, 5,
GA_RelVerify, TRUE,
GA_TabCycle, TRUE,
STRINGA_TextVal, voice[0]->name,
STRINGA_MaxChars, 9,
StringEnd,
CHILD_Label, LabelObject,
LABEL_Text, "Voice Name",
LabelEnd,
LAYOUT_AddChild, gMain_Gadgets[ 52 ] = ScrollerObject,
GA_ID, 52,
GA_RelVerify, TRUE,
GA_TabCycle, TRUE,
SCROLLER_Top, voice[0]->dest,
SCROLLER_Visible, 1,
SCROLLER_Total, 96,
SCROLLER_ArrowDelta, 1,
SCROLLER_Orientation, SORIENT_HORIZ,
ScrollerEnd,
CHILD_Label, LabelObject,
LABEL_Text, "Destination",
LabelEnd,
LAYOUT_AddChild, gMain_Gadgets[ 53 ] =ButtonObject,
GA_ID,53,
GA_ReadOnly, TRUE,
GA_Text,"I00",
ButtonEnd,
CHILD_WeightedHeight,0,
LayoutEnd,
CHILD_WeightedHeight,0,
LAYOUT_AddChild, HGroupObject,
LAYOUT_AddChild, gMain_Gadgets[ 30 ] = CheckBoxObject,
GA_ID, 30,
GA_RelVerify, TRUE,
GA_TabCycle, TRUE,
GA_Text, "Reverse",
CHECKBOX_TextPen, 1,
CHECKBOX_BackgroundPen, 0,
CHECKBOX_FillTextPen, 1,
CHECKBOX_TextPlace, PLACETEXT_LEFT,
CheckBoxEnd,
LAYOUT_AddChild, gMain_Gadgets[ 31 ] = CheckBoxObject,
GA_ID, 31,
GA_RelVerify, TRUE,
GA_TabCycle, TRUE,
GA_Text, "Reverse",
CHECKBOX_TextPen, 1,
CHECKBOX_BackgroundPen, 0,
CHECKBOX_FillTextPen, 1,
CHECKBOX_TextPlace, PLACETEXT_LEFT,
CheckBoxEnd,
LAYOUT_AddChild, gMain_Gadgets[ 32 ] = CheckBoxObject,
GA_ID, 32,
GA_RelVerify, TRUE,
GA_TabCycle, TRUE,
GA_Text, "Off",
CHECKBOX_TextPen, 1,
CHECKBOX_BackgroundPen, 0,
CHECKBOX_FillTextPen, 1,
CHECKBOX_TextPlace, PLACETEXT_LEFT,
CheckBoxEnd,
LayoutEnd,
CHILD_WeightedHeight,0,
LAYOUT_AddChild, HGroupObject,
LAYOUT_AddChild, gMain_Gadgets[ 28 ] =ButtonObject,
GA_ID,28,
GA_ReadOnly, TRUE,
GA_Text,"Bass Drum Analog",
ButtonEnd,
CHILD_WeightedHeight,0,
LAYOUT_AddChild, gMain_Gadgets[ 29 ] =ButtonObject,
GA_ID,29,
GA_ReadOnly, TRUE,
GA_Text,"Off",
ButtonEnd,
CHILD_WeightedHeight,0,
LayoutEnd,
CHILD_WeightedHeight,0,
LAYOUT_AddChild, LayoutObject,
LAYOUT_DeferLayout, FALSE,
LAYOUT_SpaceOuter, FALSE,
LAYOUT_BottomSpacing, 2,
LAYOUT_TopSpacing, 2,
LAYOUT_LeftSpacing, 2,
LAYOUT_RightSpacing, 2,
LAYOUT_Orientation, LAYOUT_ORIENT_HORIZ,
LAYOUT_HorizAlignment, LALIGN_LEFT,
LAYOUT_VertAlignment, LALIGN_TOP,
LAYOUT_BevelState, IDS_SELECTED,
LAYOUT_FixedHoriz, TRUE,
LAYOUT_FixedVert, TRUE,
LAYOUT_SpaceInner, TRUE,
LAYOUT_AddChild, gMain_Gadgets[ 0 ] = ScrollerObject,
GA_ID, 0,
GA_RelVerify, TRUE,
GA_TabCycle, TRUE,
SCROLLER_Top, voice[0]->level,
SCROLLER_Visible, 1,
SCROLLER_Total, 64,
SCROLLER_ArrowDelta, 1,
SCROLLER_Orientation, SORIENT_VERT,
ScrollerEnd,
CHILD_Label, LabelObject,
LABEL_Text, "M Level",
LabelEnd,
CHILD_MinHeight, 14,
LAYOUT_AddChild, gMain_Gadgets[ 1 ] = ListBrowserObject,
GA_ID, 1,
GA_RelVerify, TRUE,
LISTBROWSER_Position, 0,
LISTBROWSER_ShowSelected, TRUE,
LISTBROWSER_Selected, voice[0]->wave1+1,
LISTBROWSER_VertSeparators, TRUE,
LISTBROWSER_Separators, TRUE,
LISTBROWSER_Labels, &Wavelist,
ListBrowserEnd,
LAYOUT_AddChild, gMain_Gadgets[ 2 ] = ScrollerObject,
GA_ID, 2,
GA_RelVerify, TRUE,
GA_TabCycle, TRUE,
SCROLLER_Top, voice[0]->wave1level,
SCROLLER_Visible, 1,
SCROLLER_Total, 64,
SCROLLER_ArrowDelta, 1,
SCROLLER_Orientation, SORIENT_VERT,
ScrollerEnd,
CHILD_Label, LabelObject,
LABEL_Text, "Level 1",
LabelEnd,
CHILD_MinHeight, 14,
LAYOUT_AddChild, gMain_Gadgets[ 3 ] = ListBrowserObject,
GA_ID, 3,
GA_RelVerify, TRUE,
LISTBROWSER_Position, 0,
LISTBROWSER_Selected, voice[0]->wave2+1,
LISTBROWSER_ShowSelected, TRUE,
LISTBROWSER_VertSeparators, TRUE,
LISTBROWSER_Separators, TRUE,
LISTBROWSER_Labels, &Wavelist2,
ListBrowserEnd,
LAYOUT_AddChild, gMain_Gadgets[ 4 ] = ScrollerObject,
GA_ID, 4,
GA_RelVerify, TRUE,
GA_TabCycle, TRUE,
SCROLLER_Top, voice[0]->wave2level,
SCROLLER_Visible, 1,
SCROLLER_Total, 64,
SCROLLER_ArrowDelta, 1,
SCROLLER_Orientation, SORIENT_VERT,
ScrollerEnd,
CHILD_Label, LabelObject,
LABEL_Text, "Level 2",
LabelEnd,
CHILD_MinHeight, 14,
LayoutEnd,
LAYOUT_AddChild, LayoutObject,
LAYOUT_DeferLayout, FALSE,
LAYOUT_SpaceOuter, FALSE,
LAYOUT_BottomSpacing, 2,
LAYOUT_TopSpacing, 2,
LAYOUT_LeftSpacing, 2,
LAYOUT_RightSpacing, 2,
LAYOUT_Orientation, LAYOUT_ORIENT_VERT,
LAYOUT_HorizAlignment, LALIGN_LEFT,
LAYOUT_VertAlignment, LALIGN_TOP,
LAYOUT_BevelState, IDS_SELECTED,
LAYOUT_FixedHoriz, TRUE,
LAYOUT_FixedVert, TRUE,
LAYOUT_SpaceInner, TRUE,
LAYOUT_AddChild, HGroupObject,
LAYOUT_AddChild, VGroupObject,
LAYOUT_AddChild, gMain_Gadgets[ 6 ] = ScrollerObject,
GA_ID, 6,
GA_RelVerify, TRUE,
GA_TabCycle, TRUE,
SCROLLER_Top, voice[0]->pan1,
SCROLLER_Visible, 1,
SCROLLER_Total, 33,
SCROLLER_ArrowDelta, 1,
SCROLLER_Orientation, SORIENT_HORIZ,
ScrollerEnd,
CHILD_Label, LabelObject,
LABEL_Text, "Pan 1",
LabelEnd,
CHILD_MinHeight, 14,
LAYOUT_AddChild, gMain_Gadgets[ 8 ] = ScrollerObject,
GA_ID, 8,
GA_RelVerify, TRUE,
GA_TabCycle, TRUE,
SCROLLER_Top, voice[0]->pitch1,
SCROLLER_Visible, 1,
SCROLLER_Total, 73,
SCROLLER_ArrowDelta, 1,
SCROLLER_Orientation, SORIENT_HORIZ,
ScrollerEnd,
CHILD_Label, LabelObject,
LABEL_Text, "Pitch 1",
LabelEnd,
CHILD_MinHeight, 14,
LAYOUT_AddChild, gMain_Gadgets[ 10 ] = ScrollerObject,
GA_ID, 10,
GA_RelVerify, TRUE,
GA_TabCycle, TRUE,
SCROLLER_Top, voice[0]->decay1,
SCROLLER_Visible, 1,
SCROLLER_Total, 64,
SCROLLER_ArrowDelta, 1,
SCROLLER_Orientation, SORIENT_HORIZ,
ScrollerEnd,
CHILD_Label, LabelObject,
LABEL_Text, "Decay 1",
LabelEnd,
CHILD_MinHeight, 14,
CHILD_WeightedHeight, 0,
LAYOUT_AddChild, gMain_Gadgets[ 12 ] = ChooserObject,
GA_ID, 12,
GA_RelVerify, TRUE,
GA_TabCycle, TRUE,
CHOOSER_PopUp, TRUE,
CHOOSER_MaxLabels, 5,
CHOOSER_Active, voice[0]->filter1,
CHOOSER_Width, -1,
CHOOSER_Labels, &C_Filter1_list,
ChooserEnd,
CHILD_Label, LabelObject,
LABEL_Text, "Filter 1",
LabelEnd,
LAYOUT_AddChild, gMain_Gadgets[ 14 ] = ScrollerObject,
GA_ID, 14,
GA_RelVerify, TRUE,
GA_TabCycle, TRUE,
SCROLLER_Top, voice[0]->cutoff1,
SCROLLER_Visible, 1,
SCROLLER_Total, 128,
SCROLLER_ArrowDelta, 1,
SCROLLER_Orientation, SORIENT_HORIZ,
ScrollerEnd,
CHILD_Label, LabelObject,
LABEL_Text, "Cut Off 1",
LabelEnd,
CHILD_MinHeight, 14,
CHILD_WeightedHeight, 0,
LAYOUT_AddChild, gMain_Gadgets[ 16 ] = ScrollerObject,
GA_ID, 16,
GA_RelVerify, TRUE,
GA_TabCycle, TRUE,
SCROLLER_Top, voice[0]->res1,
SCROLLER_Visible, 1,
SCROLLER_Total, 101,
SCROLLER_ArrowDelta, 1,
SCROLLER_Orientation, SORIENT_HORIZ,
ScrollerEnd,
CHILD_Label, LabelObject,
LABEL_Text, "Res 1",
LabelEnd,
CHILD_MinHeight, 14,
CHILD_WeightedHeight, 0,
LAYOUT_AddChild, gMain_Gadgets[ 18 ] = ScrollerObject,
GA_ID, 18,
GA_RelVerify, TRUE,
GA_TabCycle, TRUE,
SCROLLER_Top, voice[0]->eg1level,
SCROLLER_Visible, 1,
SCROLLER_Total, 129,
SCROLLER_ArrowDelta, 1,
SCROLLER_Orientation, SORIENT_HORIZ,
ScrollerEnd,
CHILD_Label, LabelObject,
LABEL_Text, "EG Level 1",
LabelEnd,
CHILD_MinHeight, 14,
CHILD_WeightedHeight, 0,
LAYOUT_AddChild, gMain_Gadgets[ 20 ] = ScrollerObject,
GA_ID, 20,
GA_RelVerify, TRUE,
GA_TabCycle, TRUE,
SCROLLER_Top, voice[0]->eg1rate,
SCROLLER_Visible, 1,
SCROLLER_Total, 64,
SCROLLER_ArrowDelta, 1,
SCROLLER_Orientation, SORIENT_HORIZ,
ScrollerEnd,
CHILD_Label, LabelObject,
LABEL_Text, "EG Rate 1",
LabelEnd,
CHILD_MinHeight, 14,
CHILD_WeightedHeight, 0,
LAYOUT_AddChild, gMain_Gadgets[ 22 ] = ScrollerObject,
GA_ID, 22,
GA_RelVerify, TRUE,
GA_TabCycle, TRUE,
SCROLLER_Top, voice[0]->peglevel,
SCROLLER_Visible, 1,
SCROLLER_Total, 145,
SCROLLER_ArrowDelta, 1,
SCROLLER_Orientation, SORIENT_HORIZ,
ScrollerEnd,
CHILD_Label, LabelObject,
LABEL_Text, "Pitch EG Level",
LabelEnd,
CHILD_MinHeight, 14,
CHILD_WeightedHeight, 0,
LAYOUT_AddChild, gMain_Gadgets[ 25 ] = ChooserObject,
GA_ID, 25,
GA_RelVerify, TRUE,
GA_TabCycle, TRUE,
CHOOSER_PopUp, TRUE,
CHOOSER_MaxLabels, 9,
CHOOSER_Active, voice[0]->group,
CHOOSER_Width, -1,
CHOOSER_Labels, &C_Alternate_list,
ChooserEnd,
CHILD_Label, LabelObject,
LABEL_Text, "Alt Group",
LabelEnd,
LAYOUT_AddChild, gMain_Gadgets[ 24 ] = CheckBoxObject,
GA_ID, 24,
GA_RelVerify, TRUE,
GA_TabCycle, TRUE,
GA_Text, "Polyphonic",
CHECKBOX_TextPen, 1,
CHECKBOX_Checked, voice[0]->poly,
CHECKBOX_BackgroundPen, 0,
CHECKBOX_FillTextPen, 1,
CHECKBOX_TextPlace, PLACETEXT_LEFT,
CheckBoxEnd,
LayoutEnd,
LAYOUT_AddChild, VGroupObject,
LAYOUT_AddChild, gMain_Gadgets[ 33 ] =ButtonObject,
GA_ID,33,
GA_ReadOnly, TRUE,
GA_Text,"0",
ButtonEnd,
CHILD_WeightedHeight,0,
CHILD_WeightedWidth,10,
LAYOUT_AddChild, gMain_Gadgets[ 34 ] =ButtonObject,
GA_ID,34,
GA_ReadOnly, TRUE,
GA_Text,"0",
ButtonEnd,
CHILD_WeightedWidth,10,
CHILD_WeightedHeight,0,
LAYOUT_AddChild, gMain_Gadgets[ 35 ] =ButtonObject,
GA_ID,35,
GA_ReadOnly, TRUE,
GA_Text,"0",
ButtonEnd,
CHILD_WeightedWidth,10,
CHILD_WeightedHeight,0,
LAYOUT_AddChild, SpaceObject,
SpaceEnd,
LAYOUT_AddChild, gMain_Gadgets[ 37 ] =ButtonObject,
GA_ID,37,
GA_ReadOnly, TRUE,
GA_Text,"0",
ButtonEnd,
CHILD_WeightedWidth,10,
CHILD_WeightedHeight,0,
LAYOUT_AddChild, gMain_Gadgets[ 38 ] =ButtonObject,
GA_ID,38,
GA_ReadOnly, TRUE,
GA_Text,"0",
ButtonEnd,
CHILD_WeightedWidth,10,
CHILD_WeightedHeight,0,
LAYOUT_AddChild, gMain_Gadgets[ 39 ] =ButtonObject,
GA_ID,39,
GA_ReadOnly, TRUE,
GA_Text,"0",
ButtonEnd,
CHILD_WeightedHeight,0,
CHILD_WeightedWidth,10,
LAYOUT_AddChild, gMain_Gadgets[ 40 ] =ButtonObject,
GA_ID,40,
GA_ReadOnly, TRUE,
GA_Text,"0",
ButtonEnd,
CHILD_WeightedHeight,0,
CHILD_WeightedWidth,10,
LAYOUT_AddChild, gMain_Gadgets[ 36 ] =ButtonObject,
GA_ID,36,
GA_ReadOnly, TRUE,
GA_Text,"0",
ButtonEnd,
CHILD_WeightedWidth,10,
CHILD_WeightedHeight,0,
LAYOUT_AddChild, SpaceObject,
SpaceEnd,
LayoutEnd,
LAYOUT_AddChild, VGroupObject,
LAYOUT_InnerSpacing, 10,
LAYOUT_AddChild, gMain_Gadgets[ 7 ] = ScrollerObject,
GA_ID, 7,
GA_RelVerify, TRUE,
GA_TabCycle, TRUE,
SCROLLER_Top, voice[0]->pan2,
SCROLLER_Visible, 1,
SCROLLER_Total, 33,
SCROLLER_ArrowDelta, 1,
SCROLLER_Orientation, SORIENT_HORIZ,
ScrollerEnd,
CHILD_Label, LabelObject,
LABEL_Text, "Pan 2",
LabelEnd,
CHILD_MinHeight, 14,
CHILD_WeightedHeight, 0,
LAYOUT_AddChild, gMain_Gadgets[ 9 ] = ScrollerObject,
GA_ID, 9,
GA_RelVerify, TRUE,
GA_TabCycle, TRUE,
SCROLLER_Top, voice[0]->pitch2,
SCROLLER_Visible, 1,
SCROLLER_Total, 73,
SCROLLER_ArrowDelta, 1,
SCROLLER_Orientation, SORIENT_HORIZ,
ScrollerEnd,
CHILD_Label, LabelObject,
LABEL_Text, "Pitch 2",
LabelEnd,
CHILD_MinHeight, 14,
LAYOUT_AddChild, gMain_Gadgets[ 11 ] = ScrollerObject,
GA_ID, 11,
GA_RelVerify, TRUE,
GA_TabCycle, TRUE,
SCROLLER_Top, voice[0]->decay2,
SCROLLER_Visible, 1,
SCROLLER_Total, 64,
SCROLLER_ArrowDelta, 1,
SCROLLER_Orientation, SORIENT_HORIZ,
ScrollerEnd,
CHILD_Label, LabelObject,
LABEL_Text, "Decay 2",
LabelEnd,
CHILD_MinHeight, 14,
CHILD_WeightedHeight, 0,
LAYOUT_AddChild, gMain_Gadgets[ 13 ] = ChooserObject,
GA_ID, 13,
GA_RelVerify, TRUE,
GA_TabCycle, TRUE,
CHOOSER_PopUp, TRUE,
CHOOSER_MaxLabels, 5,
CHOOSER_Active, voice[0]->filter2,
CHOOSER_Labels, &C_Filter1_list,
ChooserEnd,
CHILD_Label, LabelObject,
LABEL_Text, "Filter 2",
LabelEnd,
LAYOUT_AddChild, gMain_Gadgets[ 15 ] = ScrollerObject,
GA_ID, 15,
GA_RelVerify, TRUE,
GA_TabCycle, TRUE,
SCROLLER_Top, voice[0]->cutoff2,
SCROLLER_Visible, 1,
SCROLLER_Total, 128,
SCROLLER_ArrowDelta, 1,
SCROLLER_Orientation, SORIENT_HORIZ,
ScrollerEnd,
CHILD_Label, LabelObject,
LABEL_Text, "Cut Off 2",
LabelEnd,
CHILD_MinHeight, 14,
CHILD_WeightedHeight, 0,
LAYOUT_AddChild, gMain_Gadgets[ 17 ] = ScrollerObject,
GA_ID, 17,
GA_RelVerify, TRUE,
GA_TabCycle, TRUE,
SCROLLER_Top, voice[0]->res2,
SCROLLER_Visible, 1,
SCROLLER_Total, 101,
SCROLLER_ArrowDelta, 1,
SCROLLER_Orientation, SORIENT_HORIZ,
ScrollerEnd,
CHILD_Label, LabelObject,
LABEL_Text, "Res 2",
LabelEnd,
CHILD_MinHeight, 14,
CHILD_WeightedHeight, 0,
LAYOUT_AddChild, gMain_Gadgets[ 19 ] = ScrollerObject,
GA_ID, 19,
GA_RelVerify, TRUE,
GA_TabCycle, TRUE,
SCROLLER_Top, voice[0]->eg2level,
SCROLLER_Visible, 1,
SCROLLER_Total, 129,
SCROLLER_ArrowDelta, 1,
SCROLLER_Orientation, SORIENT_HORIZ,
ScrollerEnd,
CHILD_Label, LabelObject,
LABEL_Text, "EG Level 2",
LabelEnd,
CHILD_MinHeight, 14,
CHILD_WeightedHeight, 0,
LAYOUT_AddChild, gMain_Gadgets[ 21 ] = ScrollerObject,
GA_ID, 21,
GA_RelVerify, TRUE,
GA_TabCycle, TRUE,
SCROLLER_Top, voice[0]->eg2rate,
SCROLLER_Visible, 1,
SCROLLER_Total, 64,
SCROLLER_ArrowDelta, 1,
SCROLLER_Orientation, SORIENT_HORIZ,
ScrollerEnd,
CHILD_Label, LabelObject,
LABEL_Text, "EG Rate 2",
LabelEnd,
CHILD_MinHeight, 14,
CHILD_WeightedHeight, 0,
LAYOUT_AddChild, gMain_Gadgets[ 23 ] = ScrollerObject,
GA_ID, 23,
GA_RelVerify, TRUE,
GA_TabCycle, TRUE,
SCROLLER_Top, voice[0]->pegrate,
SCROLLER_Visible, 1,
SCROLLER_Total, 64,
SCROLLER_ArrowDelta, 1,
SCROLLER_Orientation, SORIENT_HORIZ,
ScrollerEnd,
CHILD_Label, LabelObject,
LABEL_Text, "Pitch EG Rate",
LabelEnd,
CHILD_MinHeight, 14,
CHILD_WeightedHeight, 0,
LAYOUT_AddChild, gMain_Gadgets[ 26 ] = ChooserObject,
GA_ID, 26,
GA_RelVerify, TRUE,
GA_TabCycle, TRUE,
CHOOSER_PopUp, TRUE,
CHOOSER_MaxLabels, 12,
CHOOSER_Active, voice[0]->output,
CHOOSER_Width, -1,
CHOOSER_Labels, &C_Output_list,
ChooserEnd,
CHILD_Label, LabelObject,
LABEL_Text, "Output Assign",
LabelEnd,
LAYOUT_AddChild, gMain_Gadgets[ 27 ] = ScrollerObject,
GA_ID, 27,
GA_RelVerify, TRUE,
GA_TabCycle, TRUE,
SCROLLER_Top, voice[0]->indlevel,
SCROLLER_Visible, 1,
SCROLLER_Total, 64,
SCROLLER_ArrowDelta, 1,
SCROLLER_Orientation, SORIENT_HORIZ,
ScrollerEnd,
CHILD_Label, LabelObject,
LABEL_Text, "Indv Level",
LabelEnd,
CHILD_MinHeight, 14,
CHILD_WeightedHeight, 0,
LayoutEnd,
LAYOUT_AddChild, VGroupObject,
LAYOUT_AddChild, gMain_Gadgets[ 42 ] =ButtonObject,
GA_ID,42,
GA_ReadOnly, TRUE,
GA_Text,"0",
ButtonEnd,
CHILD_WeightedWidth,10,
CHILD_WeightedHeight,0,
LAYOUT_AddChild, gMain_Gadgets[ 43 ] =ButtonObject,
GA_ID,43,
GA_ReadOnly, TRUE,
GA_Text,"0",
ButtonEnd,
CHILD_WeightedWidth,10,
CHILD_WeightedHeight,0,
LAYOUT_AddChild, gMain_Gadgets[ 44 ] =ButtonObject,
GA_ID,44,
GA_ReadOnly, TRUE,
GA_Text,"0",
ButtonEnd,
CHILD_WeightedWidth,10,
CHILD_WeightedHeight,0,
LAYOUT_AddChild, SpaceObject,
SpaceEnd,
LAYOUT_AddChild, gMain_Gadgets[ 46 ] =ButtonObject,
GA_ID,46,
GA_ReadOnly, TRUE,
GA_Text,"0",
ButtonEnd,
CHILD_WeightedWidth,10,
CHILD_WeightedHeight,0,
LAYOUT_AddChild, gMain_Gadgets[ 47 ] =ButtonObject,
GA_ID,47,
GA_ReadOnly, TRUE,
GA_Text,"0",
ButtonEnd,
CHILD_WeightedWidth,10,
CHILD_WeightedHeight,0,
LAYOUT_AddChild, gMain_Gadgets[ 48 ] =ButtonObject,
GA_ID,48,
GA_ReadOnly, TRUE,
GA_Text,"0",
ButtonEnd,
CHILD_WeightedWidth,10,
CHILD_WeightedHeight,0,
LAYOUT_AddChild, gMain_Gadgets[ 49 ] =ButtonObject,
GA_ID,49,
GA_ReadOnly, TRUE,
GA_Text,"0",
ButtonEnd,
CHILD_WeightedWidth,10,
CHILD_WeightedHeight,0,
LAYOUT_AddChild, gMain_Gadgets[ 45 ] =ButtonObject,
GA_ID,45,
GA_ReadOnly, TRUE,
GA_Text,"0",
ButtonEnd,
CHILD_WeightedWidth,10,
CHILD_WeightedHeight,0,
LAYOUT_AddChild, gMain_Gadgets[ 41 ] =ButtonObject,
GA_ID,41,
GA_ReadOnly, TRUE,
GA_Text,"0",
ButtonEnd,
CHILD_WeightedWidth,10,
CHILD_WeightedHeight,0,
LAYOUT_AddChild, SpaceObject,
SpaceEnd,
LayoutEnd,
LayoutEnd,
LayoutEnd,
LayoutEnd,
LAYOUT_AddChild, HGroupObject,
LAYOUT_AddChild, gMain_Gadgets[ 51 ] =ButtonObject,
GA_ID,51,
GA_ReadOnly, FALSE,
GA_RelVerify, TRUE,
GA_Text,"Save Voice As...",
ButtonEnd,
CHILD_WeightedWidth, 0,
CHILD_WeightedHeight,0,
LAYOUT_AddChild, gMain_Gadgets[ 56 ] =ButtonObject,
GA_ID,56,
GA_ReadOnly, FALSE,
GA_RelVerify, TRUE,
GA_Text,"Reset Sliders",
ButtonEnd,
CHILD_WeightedWidth, 0,
CHILD_WeightedHeight,0,
LAYOUT_AddChild, gMain_Gadgets[ 62 ] = CheckBoxObject,
GA_ID, 62,
GA_RelVerify, TRUE,
GA_TabCycle, TRUE,
GA_Text, "Osc1",
CHECKBOX_Checked, osc1,
CHECKBOX_TextPen, 1,
CHECKBOX_BackgroundPen, 0,
CHECKBOX_FillTextPen, 1,
CHECKBOX_TextPlace, PLACETEXT_LEFT,
CheckBoxEnd,
LAYOUT_AddChild, gMain_Gadgets[ 63 ] = CheckBoxObject,
GA_ID, 63,
GA_RelVerify, TRUE,
GA_TabCycle, TRUE,
GA_Text, "Osc2",
CHECKBOX_Checked, osc2,
CHECKBOX_TextPen, 1,
CHECKBOX_BackgroundPen, 0,
CHECKBOX_FillTextPen, 1,
CHECKBOX_TextPlace, PLACETEXT_LEFT,
CheckBoxEnd,
LAYOUT_AddChild, gMain_Gadgets[ 57 ] =ButtonObject,
GA_ID,57,
GA_ReadOnly, FALSE,
GA_RelVerify, TRUE,
GA_Text,"Randomise Voice",
ButtonEnd,
CHILD_WeightedWidth, 0,
CHILD_WeightedHeight,0,
LAYOUT_AddChild, gMain_Gadgets[ 64 ] =ButtonObject,
GA_ID,64,
GA_ReadOnly, FALSE,
GA_RelVerify, TRUE,
GA_Text,"Randomise BANK!",
ButtonEnd,
CHILD_WeightedWidth, 0,
CHILD_WeightedHeight,0,
LayoutEnd,
CHILD_WeightedHeight,0,
LAYOUT_AddChild, HGroupObject,
LAYOUT_AddChild, gMain_Gadgets[ 58 ] =ButtonObject,
GA_ID,58,
GA_ReadOnly, FALSE,
GA_RelVerify, TRUE,
GA_Text,"Randomise Wave",
ButtonEnd,
CHILD_WeightedWidth, 0,
CHILD_WeightedHeight,0,
LAYOUT_AddChild, gMain_Gadgets[ 59 ] =ButtonObject,
GA_ID,59,
GA_ReadOnly, FALSE,
GA_RelVerify, TRUE,
GA_Text,"Randomise Pitch",
ButtonEnd,
CHILD_WeightedWidth, 0,
CHILD_WeightedHeight,0,
LAYOUT_AddChild, gMain_Gadgets[ 60 ] =ButtonObject,
GA_ID,60,
GA_ReadOnly, FALSE,
GA_RelVerify, TRUE,
GA_Text,"Randomise Filter",
ButtonEnd,
CHILD_WeightedWidth, 0,
CHILD_WeightedHeight,0,
LAYOUT_AddChild, gMain_Gadgets[ 61 ] =ButtonObject,
GA_ID,61,
GA_ReadOnly, FALSE,
GA_RelVerify, TRUE,
GA_Text,"Randomise Pan/Decay",
ButtonEnd,
CHILD_WeightedWidth, 0,
CHILD_WeightedHeight,0,
LayoutEnd,
CHILD_WeightedHeight,0,
LayoutEnd,
WindowEnd;
if ( gWindow_object )
{
if ( gMain_window = (struct Window *) CA_OpenWindow( gWindow_object ))
{
WORD Code;
char buff[15];
char *name;
ULONG wait = 0, signal = 0, result = 0, done = FALSE;
GetAttr( WINDOW_SigMask, gWindow_object, &signal );
while ( !done)
{
wait = Wait( signal | SIGBREAKF_CTRL_C );
if ( wait & SIGBREAKF_CTRL_C )
done = TRUE;
else
while (( result = CA_HandleInput( gWindow_object, &Code )) != WMHI_LASTMSG)
{
switch ( result & WMHI_CLASSMASK )
{
case WMHI_CLOSEWINDOW:
done = TRUE;
break;
case WMHI_GADGETUP:
switch( result & WMHI_GADGETMASK )
{
case 0: // Scroller Voice Level
voice[voic]->level = Code;
dump(voice[voic], TRUE);
break;
case 1: // ListBrowser _ListBrowser1
voice[voic]->wave1 = Code;
GetAttr(LISTBROWSER_SelectedNode, gMain_Gadgets[ 1 ], (ULONG *)&node);
GetListBrowserNodeAttrs(node, LBNCA_Text, &nodename,
TAG_END);
SetGadgetAttrs(gMain_Gadgets[28], gMain_window, NULL,
GA_Text, nodename,
TAG_DONE);
dump(voice[voic], TRUE);
break;
case 2: // Scroller Wave 1 Level
voice[voic]->wave1level = Code;
dump(voice[voic], TRUE);
break;
case 3: // ListBrowser _ListBrowser2
voice[voic]->wave2 = Code;
GetAttr(LISTBROWSER_SelectedNode, gMain_Gadgets[ 3 ], (ULONG *)&node);
GetListBrowserNodeAttrs(node, LBNCA_Text, &nodename,
TAG_END);
SetGadgetAttrs(gMain_Gadgets[29], gMain_window, NULL,
GA_Text, nodename,
TAG_DONE);
dump(voice[voic], TRUE);
break;
case 4: // Scroller Wave 2 Level
voice[voic]->wave2level = Code;
dump(voice[voic], TRUE);
break;
case 5: // String Voice Name
GetAttr(STRINGA_TextVal, gMain_Gadgets[ 5 ], (ULONG *)&name);
strcpy(voice[voic]->name,name);
dump(voice[voic], TRUE);
break;
case 6: // Scroller Pan 1
voice[voic]->pan1 = Code;
setind(33,Code-16); //6
dump(voice[voic], TRUE);
break;
case 7: // Scroller Pan 2
voice[voic]->pan2 = Code;
setind(42,Code-16); //7
dump(voice[voic], TRUE);
break;
case 8: // Scroller Pitch 1
voice[voic]->pitch1 = Code;
setind(34,Code-36); //8
dump(voice[voic], TRUE);
break;
case 9: // Scroller Pitch 2
voice[voic]->pitch2 = Code;
setind(43,Code-36); //9
dump(voice[voic], TRUE);
break;
case 10: // Scroller Decay 1
voice[voic]->decay1 = Code;
setind(35,Code); //10
dump(voice[voic], TRUE);
break;
case 11: // Scroller Decay 2
voice[voic]->decay2 = Code;
setind(44,Code); //11
dump(voice[voic], TRUE);
break;
case 12: // Chooser Filter 1
voice[voic]->filter1 = Code;
dump(voice[voic], TRUE);
break;
case 13: // Chooser Filter 2
voice[voic]->filter2 = Code;
dump(voice[voic], TRUE);
break;
case 14: // Scroller Cut Off 1
voice[voic]->cutoff1 = Code;
setind(37,Code); //14
dump(voice[voic], TRUE);
break;
case 15: // Scroller Cut Off 2
voice[voic]->cutoff2 = Code;
setind(46,Code); //15
dump(voice[voic], TRUE);
break;
case 16: // Scroller Res 1
voice[voic]->res1 = Code;
setind(38,Code); //16
dump(voice[voic], TRUE);
break;
case 17: // Scroller Res 2
voice[voic]->res2 = Code;
setind(47,Code); //17
dump(voice[voic], TRUE);
break;
case 18: // Scroller EG Level 1
voice[voic]->eg1level = Code;
setind(39,Code-64); //18
dump(voice[voic], TRUE);
break;
case 19: // Scroller EG Level 2
voice[voic]->eg2level = Code;
setind(48,Code-64); //19
dump(voice[voic], TRUE);
break;
case 20: // Scroller EG Rate 1
voice[voic]->eg1rate = Code;
setind(40,Code); //20
dump(voice[voic], TRUE);
break;
case 21: // Scroller EG Rate 2
voice[voic]->eg2rate = Code;
setind(49,Code); //21
dump(voice[voic], TRUE);
break;
case 22: // Scroller Pitch EG Level
voice[voic]->peglevel = Code;
setind(36,Code-72); //22
dump(voice[voic], TRUE);
break;
case 23: // Scroller Pitch EG Rate
voice[voic]->pegrate = Code;
setind(45,Code); //23
dump(voice[voic], TRUE);
break;
case 24: // CheckBox Polyphonic
if (Code) voice[voic]->poly=TRUE;
else voice[voic]->poly=FALSE;
dump(voice[voic], TRUE);
break;
case 25: // Chooser Alt Group
voice[voic]->group= Code;
dump(voice[voic], TRUE);
break;
case 26: // Chooser Output Assign
voice[voic]->output = Code;
dump(voice[voic], TRUE);
break;
case 27: // Scroller Indv Level
voice[voic]->indlevel = Code;
setind(41,Code); //27
dump(voice[voic], TRUE);
break;
case 32:
if (Code == 1)
{
SetGadgetAttrs(gMain_Gadgets[3], gMain_window, NULL,
GA_Disabled, TRUE,
TAG_DONE);
SetGadgetAttrs(gMain_Gadgets[29], gMain_window, NULL,
GA_Text, "Off",
TAG_DONE);
}
else
{
SetGadgetAttrs(gMain_Gadgets[3], gMain_window, NULL,
GA_Disabled, FALSE,
TAG_DONE);
GetAttr(LISTBROWSER_SelectedNode, gMain_Gadgets[ 3 ], (ULONG *)&node);
if (node)
{
GetListBrowserNodeAttrs(node, LBNCA_Text, &nodename,
TAG_END);
SetGadgetAttrs(gMain_Gadgets[29], gMain_window, NULL,
GA_Text, nodename,
TAG_DONE);
}
}
break;
case 51:
reqFile(voice[voic]);
break;
case 52:
voice[voic]->dest = Code;
sprintf(buff,"I%02ld",Code);
setindCH(53,buff); //52
break;
case 53:
break;
case 54:
voic=Code;
if(!voice[voic]) initvoice(voice,voic);
setsliders(voice[voic]);
setind(55,Code);
break;
case 56:
initvoice(voice,voic);
setsliders(voice[voic]);
break;
case 57:
randomsound(voice, voic, TRUE, TRUE, TRUE, TRUE, do_osc);
setsliders(voice[voic]);
dump(voice[voic], TRUE);
break;
case 58: // wave
randomsound(voice, voic, FALSE, FALSE, FALSE, TRUE, do_osc);
setsliders(voice[voic]);
dump(voice[voic], TRUE);
break;
case 59: // pitch
randomsound(voice, voic, FALSE, TRUE, FALSE, FALSE, do_osc);
setsliders(voice[voic]);
dump(voice[voic], TRUE);
break;
case 60: // filter
randomsound(voice, voic, TRUE, FALSE, FALSE, FALSE, do_osc);
setsliders(voice[voic]);
dump(voice[voic], TRUE);
break;
case 61: // pan/decay
randomsound(voice, voic, FALSE, FALSE, TRUE, FALSE, do_osc);
setsliders(voice[voic]);
dump(voice[voic], TRUE);
break;
case 62: // osc 1
if (Code) do_osc+=1;
else do_osc-=1;
break;
case 63: // osc2
if (Code) do_osc+=2;
else do_osc-=2;
break;
case 64:
for(i=0; i<96; i++)
{
if(!voice[i]) initvoice(voice,i);
randomsound(voice, i, TRUE, TRUE, TRUE, TRUE, do_osc);
setsliders(voice[i]);
SetGadgetAttrs(gMain_Gadgets[54], gMain_window, NULL,
SCROLLER_Top, i,
TAG_DONE);
setind(55,i);
sprintf(buff,"RND %02d ",i);
strcpy(voice[i]->name,buff);
SetGadgetAttrs(gMain_Gadgets[5], gMain_window, NULL,
STRINGA_TextVal, voice[i]->name,
TAG_DONE);
voice[i]->dest = i;
dump(voice[i], TRUE);
}
break;
//-----------------------------------------------------------------------------------------------
}
break;
}
}
}
}
}
for(i=0; i<96;i++)
{
if (voice[i]) FreeVec(voice[i]);
}
closeserial();
close_all();
}
return(0);
}
void close_all( void )
{
FreeChooserList(&C_Filter1_list);
FreeRadioList(&R_Filter1_list);
FreeClickTabList(&CT_Filter1_list);
FreeListBrowserList(&LB_Filter1_list);
FreeListBrowserList(&Wavelist);
FreeListBrowserList(&Wavelist2);
FreeChooserList(&C_Alternate_list);
FreeRadioList(&R_Alternate_list);
FreeClickTabList(&CT_Alternate_list);
FreeListBrowserList(&LB_Alternate_list);
FreeChooserList(&C_Output_list);
FreeRadioList(&R_Output_list);
FreeClickTabList(&CT_Output_list);
FreeListBrowserList(&LB_Output_list);
if ( gApp_port )
DeleteMsgPort( gApp_port );
if ( gDrinfo )
FreeScreenDrawInfo( gScreen, gDrinfo);
if ( gVi )
FreeVisualInfo( gVi );
if ( gScreen )
UnlockPubScreen(0, gScreen );
if ( gWindow_object )
{
DisposeObject( gWindow_object );
gWindow_object = NULL;
gMain_window = NULL;
}
}
void setind(int display, int level)
{
char buff[10];
sprintf(buff,"%d",level);
SetGadgetAttrs(gMain_Gadgets[display], gMain_window, NULL,
GA_Text, buff,
TAG_DONE);
}
void setindCH(int display, char *string)
{
SetGadgetAttrs(gMain_Gadgets[display], gMain_window, NULL,
GA_Text, string,
TAG_DONE);
}
int openserial(char *devicename)
{
UWORD status;
UBYTE *user;
if (SerialMP=CreatePort(NULL,NULL) )
{
if (SerialIO=(struct IOExtSer *)CreateExtIO(SerialMP,sizeof(struct IOExtSer)) )
{
if (OpenDevice(devicename,0L,(struct IORequest *)SerialIO,0))
{
printf("\n%s did not open",devicename);
return 0;
}
else
{
SerialIO->IOSer.io_Command = SDCMD_QUERY;
DoIO((struct IORequest *)SerialIO); /* execute query */
status = SerialIO->io_Status; /* store returned status */
SerialIO->IOSer.io_Command = SDCMD_SETPARAMS;
SerialIO->io_SerFlags &= ~SERF_PARTY_ON;
SerialIO->io_SerFlags|=(SERF_RAD_BOOGIE|SERF_XDISABLED);
SerialIO->io_Baud = 31250;
DoIO((struct IORequest *)SerialIO);
}
}
else return 1;
}
else return 2;
}
void closeserial(void)
{
if (SerialIO)
{
CloseDevice((struct IORequest *)SerialIO);
DeleteExtIO((struct IORequest *)SerialIO);
DeletePort(SerialMP);
}
}
BOOL sendsysex(char *packet)
{
SerialIO->IOSer.io_Length=126;
SerialIO->IOSer.io_Data=(APTR)packet;
SerialIO->IOSer.io_Command=CMD_WRITE;
if (DoIO((struct IORequest *)SerialIO))
return (DOSTRUE);
return DOSFALSE;
}
void initvoice(struct RYVoice *voice[], int n)
{
if (!voice[n]) voice[n] = AllocVec(sizeof(struct RYVoice),MEMF_CLEAR|MEMF_PUBLIC);
voice[n]->src=0;
voice[n]->dest=0;
voice[n]->level=63;
voice[n]->peglevel=72;
voice[n]->pegrate=0;
voice[n]->output=0;
voice[n]->indlevel=63;
strcpy(voice[n]->name,"No Name1");
voice[n]->wave1=0;
voice[n]->wave1level=63;
voice[n]->pan1=16;
voice[n]->pitch1=36;
voice[n]->decay1=63;
voice[n]->filter1=0;
voice[n]->cutoff1=0;
voice[n]->res1=80;
voice[n]->eg1level=64;
voice[n]->eg1rate=00;
voice[n]->sen_level1=0;
voice[n]->sen_pitch1=0;
voice[n]->sen_eg1=0;
voice[n]->wave2=0;
voice[n]->wave2level=63;
voice[n]->pan2=16;
voice[n]->pitch2=36;
voice[n]->decay2=63;
voice[n]->filter2=0;
voice[n]->cutoff2=0;
voice[n]->res2=80;
voice[n]->eg2level=64;
voice[n]->eg2rate=00;
voice[n]->sen_level2=0;
voice[n]->sen_pitch2=0;
voice[n]->sen_eg2=0;
voice[n]->group=0;
voice[n]->poly=TRUE;
}
void dump(struct RYVoice *voice, BOOL midi)
{
int i;
int temp=0;
char tempb[20];
char *name;
char buffer[130];
char tmp[2];
char timp[6];
char t;
LONG tmp1;
LONG sum;
LONG loop;
GetAttr(STRINGA_TextVal, gMain_Gadgets[ 5 ], (ULONG *)&name);
strcpy(voice->name,name);
checksum = 0;
if ((strlen(name))< 8)
{
for(i=strlen(voice->name); i<8; i++)
{
voice->name[i] = ' ';
}
}
for(i=0;i< 6; i++)
buffer[i] = (char) d_header[i];
for(i=0;i< 24; i++)
buffer[6+i] = (char) id[i];
buffer[30] = (char)voice->src;
buffer[31] = (char)voice->dest;
assign(buffer, voice->level,32);
assign(buffer,voice->peglevel,34);
assign(buffer,voice->pegrate,36);
temp=(voice->group*10)+voice->output;
if (voice->poly) temp+=0x80;
assign(buffer,temp,38);
assign(buffer,voice->indlevel,40);
for(i=0;i<8;i++)
{
sprintf(timp,"%X",voice->name[i]);
buffer[42+(i*2)] = timp[0];
buffer[42+1+(i*2)] = timp[1];
}
assign(buffer,255,58);
assign(buffer,255,60);
assign(buffer,255,62);
assign(buffer,voice->wave1,64);
assign(buffer,voice->wave1level,66);
assign(buffer,voice->pan1,68);
assign(buffer,voice->pitch1,70);
assign(buffer,0,72);
assign(buffer, voice->decay1,74);
assign(buffer, voice->filter1,76);
assign(buffer, voice->cutoff1,78);
assign(buffer, voice->res1,80);
assign(buffer, voice->eg1level,82);
assign(buffer, voice->eg1rate,84);
assign(buffer, voice->sen_level1,86);
assign(buffer, voice->sen_pitch1,88);
assign(buffer, voice->sen_eg1,90);
assign(buffer,0,92);
assign(buffer, voice->wave2,94);
assign(buffer, voice->wave2level,96);
assign(buffer, voice->pan2,98);
assign(buffer, voice->pitch2,100);
assign(buffer,0,102);
assign(buffer, voice->decay2,104);
assign(buffer, voice->filter2,106);
assign(buffer, voice->cutoff2,108);
assign(buffer, voice->res2,110);
assign(buffer, voice->eg2level,112);
assign(buffer, voice->eg2rate,114);
assign(buffer, voice->sen_level2,116);
assign(buffer, voice->sen_pitch2,118);
assign(buffer, voice->sen_eg2,120);
assign(buffer,0,122);
checksum=0;
sum=0;
for(tmp1=6; tmp1<124; tmp1++)
{
sum+= buffer[tmp1];
}
checksum=(UBYTE)(-sum& 0x7f);
buffer[124]=checksum;
buffer[125]=0xF7;
if(!midi)
{
for(tmp1=0; tmp1<126;tmp1++)
{
fprintf(voicefile,"%c",buffer[tmp1]);
}
}
else sendsysex(buffer);
}
void assign(char *dest, int src, int pos)
{
char tmp[6];
sprintf(tmp,"%02X",src);
dest[pos] = tmp[0];
dest[pos+1]= tmp[1];
}
void setsliders(struct RYVoice *voice)
{
char buff[5];
SetGadgetAttrs(gMain_Gadgets[52], gMain_window, NULL,
SCROLLER_Top, voice->dest,
TAG_DONE);
sprintf(buff,"I%02ld",voice->dest);
setindCH(53,buff); //52
SetGadgetAttrs(gMain_Gadgets[0], gMain_window, NULL,
SCROLLER_Top, voice->level,
TAG_DONE);
SetGadgetAttrs(gMain_Gadgets[22], gMain_window, NULL,
SCROLLER_Top, voice->peglevel,
TAG_DONE);
setind(36,voice->peglevel-72); //22
SetGadgetAttrs(gMain_Gadgets[23], gMain_window, NULL,
SCROLLER_Top, voice->pegrate,
TAG_DONE);
setind(45,voice->pegrate); //23
SetGadgetAttrs(gMain_Gadgets[26], gMain_window, NULL,
CHOOSER_Active, voice->output,
TAG_DONE);
SetGadgetAttrs(gMain_Gadgets[27], gMain_window, NULL,
SCROLLER_Top, voice->indlevel,
TAG_DONE);
setind(41,voice->indlevel); //27
SetGadgetAttrs(gMain_Gadgets[1], gMain_window, NULL,
LISTBROWSER_Selected, voice->wave1,
LISTBROWSER_MakeVisible,voice->wave1,
TAG_DONE);
SetGadgetAttrs(gMain_Gadgets[2], gMain_window, NULL,
SCROLLER_Top, voice->wave1level,
TAG_DONE);
SetGadgetAttrs(gMain_Gadgets[6], gMain_window, NULL,
SCROLLER_Top, voice->pan1,
TAG_DONE);
setind(33,voice->pan1-16); //6
SetGadgetAttrs(gMain_Gadgets[8], gMain_window, NULL,
SCROLLER_Top, voice->pitch1,
TAG_DONE);
setind(34,voice->pitch1-36); //8
SetGadgetAttrs(gMain_Gadgets[10], gMain_window, NULL,
SCROLLER_Top, voice->decay1,
TAG_DONE);
setind(35,voice->decay1); //10
SetGadgetAttrs(gMain_Gadgets[12], gMain_window, NULL,
CHOOSER_Active, voice->filter1,
TAG_DONE);
SetGadgetAttrs(gMain_Gadgets[14], gMain_window, NULL,
SCROLLER_Top, voice->cutoff1,
TAG_DONE);
setind(37,voice->cutoff1); //14
SetGadgetAttrs(gMain_Gadgets[16], gMain_window, NULL,
SCROLLER_Top, voice->res1,
TAG_DONE);
setind(38,voice->res1); //16
SetGadgetAttrs(gMain_Gadgets[18], gMain_window, NULL,
SCROLLER_Top, voice->eg1level,
TAG_DONE);
setind(39,voice->eg1level-64); //18
SetGadgetAttrs(gMain_Gadgets[20], gMain_window, NULL,
SCROLLER_Top, voice->eg1rate,
TAG_DONE);
setind(40,voice->eg1rate); //20
SetGadgetAttrs(gMain_Gadgets[3], gMain_window, NULL,
LISTBROWSER_Selected, voice->wave2,
LISTBROWSER_MakeVisible,voice->wave2,
TAG_DONE);
SetGadgetAttrs(gMain_Gadgets[4], gMain_window, NULL,
SCROLLER_Top, voice->wave2level,
TAG_DONE);
SetGadgetAttrs(gMain_Gadgets[7], gMain_window, NULL,
SCROLLER_Top, voice->pan2,
TAG_DONE);
setind(42,voice->pan2-16); //7
SetGadgetAttrs(gMain_Gadgets[9], gMain_window, NULL,
SCROLLER_Top, voice->pitch2,
TAG_DONE);
setind(43,voice->pitch2-36); //9
SetGadgetAttrs(gMain_Gadgets[11], gMain_window, NULL,
SCROLLER_Top, voice->decay2,
TAG_DONE);
setind(44,voice->decay2); //11
SetGadgetAttrs(gMain_Gadgets[13], gMain_window, NULL,
CHOOSER_Active, voice->filter2,
TAG_DONE);
SetGadgetAttrs(gMain_Gadgets[15], gMain_window, NULL,
SCROLLER_Top, voice->cutoff2,
TAG_DONE);
setind(46,voice->cutoff2); //15
SetGadgetAttrs(gMain_Gadgets[17], gMain_window, NULL,
SCROLLER_Top, voice->res2,
TAG_DONE);
setind(47,voice->res2); //17
SetGadgetAttrs(gMain_Gadgets[19], gMain_window, NULL,
SCROLLER_Top, voice->eg2level,
TAG_DONE);
setind(48,voice->eg2level-64); //19
SetGadgetAttrs(gMain_Gadgets[21], gMain_window, NULL,
SCROLLER_Top, voice->eg2rate,
TAG_DONE);
setind(49,voice->eg2rate); //21
SetGadgetAttrs(gMain_Gadgets[25], gMain_window, NULL,
CHOOSER_Active, voice->group,
TAG_DONE);
SetGadgetAttrs(gMain_Gadgets[5], gMain_window, NULL,
STRINGA_TextVal, voice->name,
TAG_DONE);
if (voice->poly)
{
SetGadgetAttrs(gMain_Gadgets[24], gMain_window, NULL,
CHECKBOX_Checked, TRUE,
TAG_DONE);
}
else
{
SetGadgetAttrs(gMain_Gadgets[24], gMain_window, NULL,
CHECKBOX_Checked, FALSE,
TAG_DONE);
}
GetAttr(LISTBROWSER_SelectedNode, gMain_Gadgets[ 1 ], (ULONG *)&node);
GetListBrowserNodeAttrs(node, LBNCA_Text, &nodename,
TAG_END);
SetGadgetAttrs(gMain_Gadgets[28], gMain_window, NULL,
GA_Text, nodename,
TAG_DONE);
GetAttr(LISTBROWSER_SelectedNode, gMain_Gadgets[ 3 ], (ULONG *)&node);
GetListBrowserNodeAttrs(node, LBNCA_Text, &nodename,
TAG_END);
SetGadgetAttrs(gMain_Gadgets[29], gMain_window, NULL,
GA_Text, nodename,
TAG_DONE);
}
void randomsound(struct RYVoice *voice[], int voic, BOOL filter, BOOL pitch, BOOL decay_pan, BOOL wave, int osc)
{
if(pitch)
{
voice[voic]->peglevel=rnd_num(144);
voice[voic]->pegrate=rnd_num(64);
}
if ((osc==1) || (osc ==3))
{
if (wave) voice[voic]->wave1=rnd_num(90);
if(decay_pan)
{
voice[voic]->pan1=rnd_num(32);
voice[voic]->decay1=rnd_num(63);
}
if(pitch)voice[voic]->pitch1=rnd_num(72);
if(filter)
{
voice[voic]->filter1=rnd_num(5);
voice[voic]->cutoff1=rnd_num(128);
voice[voic]->res1=rnd_num(100);
voice[voic]->eg1level=rnd_num(128);
voice[voic]->eg1rate=rnd_num(64);
}
voice[voic]->sen_level1=rnd_num(7);
voice[voic]->sen_pitch1=rnd_num(7);
voice[voic]->sen_eg1=rnd_num(7);
}
if((osc==2) || (osc==3))
{
if(wave)voice[voic]->wave2=rnd_num(90);
if(decay_pan)
{
voice[voic]->pan2=rnd_num(32);
voice[voic]->decay2=rnd_num(63);
}
if (pitch) voice[voic]->pitch2=rnd_num(72);
if(filter)
{
voice[voic]->filter2=rnd_num(5);
voice[voic]->cutoff2=rnd_num(128);
voice[voic]->res2=rnd_num(100);
voice[voic]->eg2level=rnd_num(128);
voice[voic]->eg2rate=rnd_num(64);
}
voice[voic]->sen_level2=rnd_num(7);
voice[voic]->sen_pitch2=rnd_num(7);
voice[voic]->sen_eg2=rnd_num(7);
}
if (rnd_num(64) < 32) voice[voic]->poly=TRUE;
else voice[voic]->poly=FALSE;
}
int rnd_num(int max)
{
int i;
LONG j;
double k;
srand(rand()*rand());
j=rand();
k=(double)j/2147483647;
j=(LONG)(k*max);
return (int)j;
}
BOOL reqFile(struct RYVoice *voice)
{
struct FileRequester *fr;
char filename[127];
if (fr = (struct FileRequester *)
AllocAslRequest(ASL_FileRequest, frtags))
{
if (AslRequest(fr, NULL))
{
strcpy(filename, fr->rf_Dir);
AddPart(filename,fr->rf_File, 100);
FreeAslRequest(fr);
voicefile = fopen(filename,"wb");
dump(voice, FALSE);
fclose(voicefile);
return TRUE;
}
}
FreeAslRequest(fr);
return FALSE;
}